package cc.toprank.syncdatatask.util;

import cc.toprank.syncdatatask.pojo.TableInfo;
import org.apache.log4j.Logger;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Iterator;
import java.util.List;

/**
 * 
 * 主要用于解析并处理XML格式的数据 
 * 作者:黄小云 
 * 日期:2017年2月28日
 * 
 */
public class XmlHelper {
	private static XmlHelper instance = new XmlHelper();
	private String sysconfigPath = XmlHelper.class.getResource("/sysconfig.xml").getPath();
	private Logger logger = Logger.getLogger(XmlHelper.class);

	private XmlHelper() {

	}

	public synchronized static XmlHelper getInstance() {
		if (instance == null) {
			instance = new XmlHelper();
		}
		return instance;
	}

	// 加载待同步数据库及其表的配置文件
	public void loadSyncDbConfig() throws UnsupportedEncodingException {

		// 创建saxReader对象
		SAXReader reader = new SAXReader();
		// 通过read方法读取一个文件 转换成Document对象
		Document document;
		try {
			sysconfigPath = URLDecoder.decode(sysconfigPath,"UTF-8");
			document = reader.read(new File(sysconfigPath));

			// 获取根节点元素对象
			Element node = document.getRootElement();
			// 当前节点下面子节点迭代器
			Iterator<Element> it = node.elementIterator();
			// 遍历
			while (it.hasNext()) {
				// 获取某个子节点对象
				Element e = it.next();
				// 对子节点进行遍历
				listNodes(e);
			}
		} catch (DocumentException e) { 
			e.printStackTrace();
		}

	}

	/**
	 * 遍历当前节点元素下面的所有(元素的)子节点
	 * 
	 * @param node
	 */
	public void listNodes(Element node) {
		// 获取当前节点的所有属性节点
		List<Attribute> list = node.attributes();
		// 遍历属性节点
		TableInfo tableInfo = new TableInfo();
		for (Attribute attr : list) {
				if ("id".equals(attr.getName())) {
					tableInfo.setId(attr.getValue());
				}
				if ("primarykey".equals(attr.getName())) {
					tableInfo.setPrimaryKey(attr.getValue());
				}
		}

		GlobalContants.dbSyncTablesMap.put(tableInfo.getId(),tableInfo);
	}
}
